# 1.位置参数传递
# 实参按照相应的位置依次传递给形参
def get_max(a, b):
    if a > b:
        print(f'{a}是最大值')
    else:
        print(b, "是最大值")


get_max(1, 2)  # 2 是最大值


# 按照参数的位置进行传递 a=1,b=2

# 2.关键字参数的传递
def speak(name, content):
    print(f"{name}说:{content}")


speak(content="我要好好学习", name="王大头")


# 3.默认参数的传递
# 设置默认值在没有传参时默认使用默认值进行传递
def speak(name, content="我好烦哦！"):  # 为形参content设置默认值
    print(f'{name}说:{content}')


speak("大头")  # content不传递实参,默认使用默认值


# 4.参数的打包和解包
# ①打包:在定义时无法确定需要接收多少个数据,那么可以在定义函数时为形参添加*或**
# *:接收以元组形式打包的多个值   **:接收以字典形式打包多个值
def test(*args):
    print(args)


def test1(**kwargs):
    print(kwargs)


test(1, 2, 3, 4, 5)  # (1, 2, 3, 4, 5)
test1(a=11, b=22, c=33)  # {'a': 11, 'b': 22, 'c': 33}


# ②解包
# 当实参为元组时，使用*将元组拆分成多个值，并按照位置参数传递方式赋值给形参
# 当实参为字典时，使用**将字典拆分成多个键值对，并按照关键字参数进行传递给形参
def test(name, age, weight):
    print(name, age, weight)


arguments = ("张三", 18, 60)  # 实参为元组时进行解包赋值
test(*arguments)  # 张三 18 60
arguments = {'name': "李四", 'age': 20, "weight": 65}
test(**arguments)  # 李四 20 65  #实参为字典时进行解包赋值

# ⑤混合传递
# 优先级：位置参数、关键字参数、默认参数、打包传递
